/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package vo;


import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name="Produto")
public class ProdutoVO implements Serializable {

    @Id
    @SequenceGenerator( name = "cod_produto", sequenceName = "cod_produto_seq",allocationSize = 1 )
    @GeneratedValue( strategy = GenerationType.SEQUENCE, generator="cod_produto")
    @Column(name="cod_produto", nullable = false)
    private int codProduto;
    @Column(name="descricao")
    private String descricao;
    @Column(name="quantidade_min")
    private int quantidadeMinima;
    @Column(name="quantidade_atual")
    private int quantidadeAtual;
    @Column (name = "preco_custo")
    private double precoCusto;
    @Column (name = "preco_venda")
    private double precoVenda;
    @Column (name = "ativo")
    private boolean ativo;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="cod_categoria", insertable=true, updatable=true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private CategoriaVO categoria;

    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name="Item_venda", joinColumns={@JoinColumn(name="cod_produto")}, inverseJoinColumns={@JoinColumn(name="cod_venda")})
    @Cascade(CascadeType.SAVE_UPDATE)
    private Collection<VendaVO> vendas;
    
    //Construtor Vazio
    public ProdutoVO(){
        
    }
    //Construtor com Parâmetros
    public ProdutoVO(int codProduto, String descricao, int quantidadeMinima, int quantidadeAtual, Double precoCusto, Double precoVenda,CategoriaVO categoria){
        this.setCodProduto(codProduto);
        this.setDescricao(descricao);
        this.setQuantidadeMinima(quantidadeMinima);
        this.setQuantidadeAtual(quantidadeAtual);
        this.setPrecoCusto(precoCusto);
        this.setPrecoVenda(precoVenda);
        this.categoria = categoria;
        this.ativo = true;
    }

    //Métodos Get() e Set()
    public boolean isAtivo() {
        return ativo;
    }

    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }

    public CategoriaVO getCategoria() {
        return categoria;
    }

    public void setCategoria(CategoriaVO categoria) {
        this.categoria = categoria;
    }

    public int getCodProduto() {
        return codProduto;
    }

    public void setCodProduto(int codProduto) {
        this.codProduto = codProduto;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public double getPrecoCusto() {
        return precoCusto;
    }

    public void setPrecoCusto(double precoCusto) {
        this.precoCusto = precoCusto;
    }

    public double getPrecoVenda() {
        return precoVenda;
    }

    public void setPrecoVenda(double precoVenda) {
        this.precoVenda = precoVenda;
    }

    public int getQuantidadeAtual() {
        return quantidadeAtual;
    }

    public void setQuantidadeAtual(int quantidadeAtual) {
        this.quantidadeAtual = quantidadeAtual;
    }

    public int getQuantidadeMinima() {
        return quantidadeMinima;
    }

    public void setQuantidadeMinima(int quantidadeMinima) {
        this.quantidadeMinima = quantidadeMinima;
    }

    public Collection<VendaVO> getVendas() {
        return vendas;
    }

    public void setVendas(Collection<VendaVO> vendas) {
        this.vendas = vendas;
    }



}
